#!/usr/bin/env python
#coding=utf-8

import socket
import os
import sys
import datetime
import ConfigParser


#得到程序运行目录
root_dir = os.path.abspath(os.path.dirname(__file__))

#建立日志目录
log_dir = os.path.join(root_dir,'log')
if not os.path.isdir(log_dir):
    os.makedirs(log_dir)

today = datetime.datetime.now()

#分割参数
split = "$sftang"

def rsync(host,rsync_module,path,exclude,command):
    """
    同步操作
    参数：
         host            主机ip
         rsync_module    rsync同步模块
         path            远程同步目录
         exclude         忽略文件
    """
    


    rsync_param = rsync_module + split + path + split + exclude + split + command
        
    fname = os.path.join(log_dir,rsync_module + ".log")
    f = file(fname,'a+')
    
    
    for ip in host.split(','):

        port = 28000
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)                                                  
            s.connect((ip, port))	
            s.send(rsync_param)
            FileData = s.recv(1024)
    
            f.write(str(today) + "---" + FileData)
    
            s.close()
        except socket.error:
            #print ip + "---Connection refused \n"
            f.write(str(today) + "---" + ip + "---Connection refused \n")
            f.close()
            
    f.close()
        


    return
    
#检查是否有参数
if len(sys.argv) != 2:
    print "CN:缺少模块参数 EN:Usage:python %s module_name" % sys.argv[0]
    sys.exit()

#得到模块名称
rsync_module = sys.argv[1]

config_file = os.path.join(root_dir,'server.ini')

if not os.path.isfile(config_file):
    print "CN:没有找到配置文件server.ini EN:Not Found Config File server.ini"
    sys.exit()

config = ConfigParser.ConfigParser()

config.readfp(open(config_file))

try:
    #远程同步目录
    path = config.get(rsync_module,"path")
    if path == '' or path[0] != '/':
        print "CN:没有找到发布客户机同步目录 EN: Not Found host rsync dir"
        sys.exit()        
        
    #主机列表
    host = config.get(rsync_module,"host")
    
    if host == '':
        print "CN:没有找到发布客户机IP EN: Not Found host ip"
        sys.exit()
        
    #忽略文件
    exclude = config.get(rsync_module,"exclude")
    #执行命令
    command = config.get(rsync_module,"command")
    
    rsync(host, rsync_module, path, exclude, command)
    
except ConfigParser.NoSectionError,e:
    print "CN:没有找到同步模块 EN: %s" % e
except ConfigParser.NoOptionError,e:
    print "CN:没有找到操作选项 EN: %s" % e

